APPLICATION QCM
Pierre-Alain Vidil
07/08/2022
L'application QCM est une suite de pages web écrites en PHP permettant de construire rapidement un outil de test de connaissances.
L'administrateur du site crée des questionnaires qui pourront ensuite être proposés à des candidats pour évaluer leurs connaissances.
L'administrateur pourra ensuite visualiser ou imprimer les résultats.
Les questions et ses réponses ainsi que les listes de candidats pourront être saisies directement dans l'application mais, bien plus pratique, pourront être créées dans un fichier csv et insérées d'un seul coup dans l'application.
LES TABLES :
Les structures des tables prédentées ici sont extraites de MYSQL. A chacun de les adapter en fonction du sereur SQL qu'il a l'habitude d'utiliser.
--
-- Structure de la table `administrateurs`
--
CREATE TABLE `administrateurs` (
`NumAdm` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`PrenomNom` varchar(50) NOT NULL,
`MotPass` char(32) NOT NULL,
`Autorisations` char(1) DEFAULT NULL
) DEFAULT CHARSET=utf8mb4;
Explications : C'est la table qui permet de définir les personnes autorisées à gérer l'application.
PrenomNom : est le champ contenant l'identifiant de l'administrateur.
MotPass : est le Hash MD5 du mot de passe de l'utilisateur. Il est calculé automatiquement lors de la création de l'utilisateur.
Autorisations : A=toutes, L=lecture seule, Z=Lecture seule + interdiction consulter les administrateurs.
-- --------------------------------------------------------
--
-- Structure de la table `qcm`
--
CREATE TABLE `qcm` (
`Mnemonique` char(3) NOT NULL PRIMARY KEY,
`NomQcm` varchar(50) NOT NULL,
`MaxTime` smallint(6) NOT NULL,
`Pourcentage` tinyint(4) DEFAULT NULL
) DEFAULT CHARSET=utf8mb4;
Explications : C'est la table définit les différents tests de connaissances contenus dans l'application.
La suppression d'un enregistrement qcm supprimera toutes les questions et les réponses (ainsi que les sujets) liées à ce qcm.
Mnemonique : est un sigle de 3 lettres identifiant le qcm.
NomQcm : est le titre complet du qcm
MaxTime : est le temps imparti au candidat pour remplir entièrement le qcm
Pourcentage : est le pourcentage de bonnes réponses que doit obtenir le candidat pour être considéré comme ayant réussi le test.
-- --------------------------------------------------------
--
-- Structure de la table `sujets`
--
CREATE TABLE `sujets` (
`MnemoQcm` char(3) NOT NULL,
`NoSujet` tinyint(4) NOT NULL,
`Sujet` varchar(50) DEFAULT NULL
PRIMERY KEY (MnemoQcm, NoSujet)
) DEFAULT CHARSET=utf8mb4;
Explications : Cette table permet de définir les chapitres d'un qcm.
Par exemple un qcm sur les maths pouraient avoir des questions sur l'algèbre, sur la géométrie, sur les statistiques etc.
A la fin du test, le candidat peut voir dans quel domaine il a le mieux ou le moins bien réussi.
MnemoQcm : est le mnémonique du qcm concerné
NoSujet : est un numéro qu'on va retrouver dans la table questions qui identifie à quel chapitre est rattachée la question
Sujet : est le titre complet du sujet. Lors de la création d'un fichier de questions à insérer dans l'application, c'est ce champ qu'il faudra utiliser (pas le numéro)
-- --------------------------------------------------------
--
-- Structure de la table `questions`
--
CREATE TABLE `questions` (
`MnemoQcm` char(3) NOT NULL,
`NoQuestion` smallint(6) NOT NULL,
`Enonce` text NOT NULL,
`TypeQuestion` char(1) NOT NULL,
`Conseil` varchar(50) NOT NULL,
`Note` tinyint(4) NOT NULL,
`Sujet` tinyint(4) NOT NULL,
`Image` varchar(255) DEFAULT NULL,
`GroupeInsecable` char(1) NOT NULL DEFAULT 'N',
`NoGroupe` smallint(6) NOT NULL DEFAULT '0',
PRIMARY KEY (MnemoQcm, NoQuestion)
) DEFAULT CHARSET=utf8mb4;
Explications : C'est la table des énoncés des questions.
MnemoQcm : est le mnémonique du qcm concerné
NoQuestion : est le numéro de la question dans ce qcm. Ce numéro est libre mais il est préférable de commencer à 1.
Enonce : l'énoncé. Il est crypté lors de l'enregistrement dans la base de données.
TypeQuestion : contient N si la réponse est unique ; contient O si c'est une réponse à choix multiple. Lors de la création d'un fichier de questions à insérer dans l'application,
au lieu de N ou O il faudra préciser "Bouton radio" ou "Case à cocher".
Conseil : un commentaire sur le type de réponse. par exemple : "Sélectionnez la meilleure réponse" ou bien "Cochez toutes les bonnes réponses" etc.
Note : un nombre qui définit la valeur de la question si la réponse est juste. Le pourcentage est calculé sur la somme des notes du qcm entier.
Sujet : c'est le numéro du chapitre auquel se rapporte la question.
Image : c'est le nom d'un fichier image qui pourra être affiché au moment où la question est posée pour compléter la question. On pourra utiliser des jpeg ou des png.
Les fichiers images devront être uploadés manuellement dans la dossier "images" du dossier contenant les pages de l'application.
GroupeInsecable : Au lancement du test, les questions sont mélangées afin que les candidats, s'ils sont proches les uns des autres, ne puissent pas se copier. Cependant, il peut être
intéressant de faire en sorte que certains lots de questions soient posées les unes derrière les autres. C'est un groupe insécable.
Ce champ peut prendre 3 valeurs :
N ce n'est pas une question d'un groupe insécable
O c'est une question d'un groupe insécable. Les questions du groupe seront affichées les unes derrière les autres dans un ordre aléatoire
I c'est une question d'un groupe insécable et, de plus, ce groupe de questions ne doit pas être mélangé à l'intérieur de lui-même
NoGroupe : Ce champ vaut 0 (zéro) si la question n'appatient pas à un groupe insécable. A l'inverse, ce numéro permet d'identifier le groupe insécable. Ce numéro est libre mais
doit être identique pour toutes les questions du groupe. On peut créer autant de groupes insécables qu'on veut ayant chacun un numéro différent.
-- --------------------------------------------------------
--
-- Structure de la table `reponses`
--
CREATE TABLE `reponses` (
`MnemoQcm` char(3) NOT NULL,
`NoQuestion` smallint(6) NOT NULL,
`Lettre` char(1) NOT NULL,
`TexteReponse` text NOT NULL,
`Juste` char(1) NOT NULL,
PRIMARY KEY (MnemoQcm, NoQuestion, Lettre)
) DEFAULT CHARSET=utf8mb4;
Explications : C'est la table contenant les réponses aux questions.
MnemoQcm est le mnémonique du qcm concerné
NoQuestion : c'est le numéro de la question à laquelle cette réponse se rapporte
Lettre : c'est une lettre (A, B, C etc.) qui identifie la réponse
TexteReponse : c'est le texte proposé de la réponse à la question. Il est crypté lors de son enregistrement dans la base de données
Juste : O définit que cette réponse est juste ; N définit que cette réponse n'est pas la bonne. Il peut y avoir plusieurs réponses justes à une même question (choix multiple).
-- --------------------------------------------------------
--
-- Structure de la table `groupes`
--
CREATE TABLE `groupes` (
`NomGroupe` varchar(8) NOT NULL PRIMARY KEY
) DEFAULT CHARSET=utf8mb4;
Explications : Cette table permet d'identifier des groupes de candidats. Si l'organisation qui propose ces qcm organise des sessions ou des classes il peut être intéressant de pouvoir tester leurs connaissances en fin de session. La notion de groupe permet de créer les examens pour tous les candidtas du groupe en une seule opération. La suppression d'un groupe supprimera tous les candidats qui appartiennent à ce groupe et tous les examens contenant ce groupe.
NomGroupe : identifiant du groupe (1 à 8 caractères).
-- --------------------------------------------------------
--
-- Structure de la table `candidats`
--
CREATE TABLE `candidats` (
`NumCandidat` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`Nom` varchar(30) NOT NULL,
`Prenom` varchar(25) NOT NULL,
`NomGroupe` varchar(8) DEFAULT NULL
) DEFAULT CHARSET=utf8mb4;
Explications : C'est la table des candidats qui veulent passer un test.
Nom : nom du candidat
Prenom : prénom du candidat
NomGroupe : le nom du groupe auquel appatient le candidat. Il est conseillé d'en mettre un même si le candidat ne fait pas partie d'un groupe (ce groupe n'aura qu'un seul candidat).
-- --------------------------------------------------------
--
-- Structure de la table `examen`
--
CREATE TABLE `examen` (
`NumExam` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`Titre` varchar(40) DEFAULT NULL,
`NumCand` int(11) NOT NULL,
`MnemoQcm` char(3) NOT NULL,
`NomGrp` varchar(8) DEFAULT NULL,
`HeureDebut` datetime DEFAULT NULL,
`MaxTime` smallint(6) NOT NULL,
`Pourcentage` tinyint(4) NOT NULL,
`NbMaxQuests` tinyint(4) NOT NULL,
`OrdreQuest` varchar(255) DEFAULT NULL,
`RepQuest` varchar(255) DEFAULT NULL,
`Resultats` varchar(255) DEFAULT NULL,
`Termine` char(1) NOT NULL DEFAULT 'N'
) DEFAULT CHARSET=utf8mb4;
Explications : C'est la table qui réunit les deux parties de l'application : les qcm et les candidats. Pour permettre à un candidat de passer un test, il faut créer un enregistrement dans la table examen pour ce candidat. Si les candidats font partie d'un groupe, on pourra créer automatiquement un enregistrement pour tous les candidats du groupe en une seule opération.
Titre : je ne sais plus pourquoi j'ai créé ce champ. Il n'est jamais utilisé dans l'application. On pourra peut-être en faire quelque-chose plus tard...
NumCand : c'est le numéro du candidat.
MnemoQcm : c'est le test que le candidat doit passer.
NomGrp : nom du groupe auquel appartient le candidat (c'est la raison pour laquelle il est conseille d'affecter le candidat à un groupe même s'il est tout seul dans ce groupe).
HeureDebut : champ rempli par l'application au lanceent du test. Il permet de contrôler le temps imparti pour terminer le test.
MaxTime : c'est le temps imparti au candidat pour terminer le test. Cette valeur provient de la table qcm.
Pourcentage : c'est le pourcentage de bonnes réponses que doit réaliser le candidat pour réussir. Cette valeur provient de la table qcm.
NbMaxQuests : c'est le nombre de questions contenues dans le qcm. Cette valeur provient de la table questions
OrdreQuest : ce champ est rempli au lancement du test par le prcessus de mélange des questions
RepQuest : ce champ est rempli au fur et à mesure que le candidat répond aux différentes questions du test
Resultats : ce champ est rempli à la fin du test au moment où le candidat affiche son score
Termine : vaut N ou O. ce champ permet de définir si l'examen est à passer ou est terminé (on peut terminer un test soit en ayant répondu à toutes les questions,
soit lorsque le temps imparti est dépassé). Seuls les tests marqués N sont proposés aux candidats.
Lorsque l'administrateur cherche à afficher les résultats, seuls les tests marqués O seront affichés.
-- --------------------------------------------------------
Retour au débutLANCEMENT DE L'APPLICATION
L'application commence par afficher le logo de l'organisation qui propose ces tests.
L'administrateur doit cliquer sur "Administrateurs, cliquez ici pour gérer les qcm's" pour paramétrer l'application.
Le candidat doit cliquer sur "Candidats, cliquer ici pour lancer le test" pour démarrer son test.
MENUS ADMINISTRATEURS
les administrateurs doivent cliquer su Ok pour entrer dans le menu Administrateur.
Est ensuite requis son identifiant et son mot de passe.
Si cette étape est réussie on affiche le menu Administrateur :
Gérer les Administrateurs :
Permet d'ajouter, de modifier ou de supprimer des administrateurs. L'administrateur principal doit avoir une autorisation "A" afin d'avoir le droit de tout faire
sur l'application. Les autres pourront avoir l'autorisation "L" pour lecture seule ou "Z" pour lecture seule et, en plus, ne pourra pas accéder au menu Administrateurs.
L'administrateur principal doit être créé à la main dans la base de données, sinon personne ne pourra accéder à l'administration. Le champ MotPass doit contenir le hash MD5 du mot de passe de
cet administrateur.
De nombreuses applications permettent de calculer ce hash comme, par exemple, HashTab, Dpasha ou la commande md5sum sous linux.
Après, dans l'application, et pour toute modification d'un utilisateur ou tout nouvel utilisateur, le hash est calculé automatiquement.
Gérer la table des matières des qcm's :
Permet d'ajouter, de modifier ou supprimer des qcm. Gérer les sujets des questions :
Permet d'ajouter, de modifier ou de supprimer les chapitres à l'intérieur d'un qcm. la notion de sujet n'intervient que très peu dans l'application.
Il permet de donner des indications au candidat quant au domaine de la question et, à la fin, permet de calculer, par domaine le pourcentage de réussite dans ce domaine.
Gérer les questions et les réponses :
Permet d'ajouter, de modifier ou de supprimer des questions. Il est recommandé d'utiliser ce menu uniquement pour effectuer de petites modifications
ou bien d'ajouter une question ou une réponse oubliée.
Avant de créer une question, il faut choisir le qcm auquel elle appartient puis cliquer sur "Saisie nouvelle question".
A la création d'une question, après avoir rempli les champs de la question, vous devez remplir les champs de la première réponse. Ensuite vous cliquez sur "Nouvelle réponse" pour créer la réponse suivante.
Chaque fois que vous cliquez sur "Nouvelle réponse" vous pourrez ajouter une réponse. S'il n'y a plus de réponse à ajouter, il faut cliquer sur Terminer.
Au cas où vous auriez oublié une réponse, vous devez choisir le qcm correspondant puis cliquer sur "Saisie nouvelle question". Arrivé là, il suffit de saisir le numéro de la question puis, en bas, remplir
les champs de la réponse oubliée.
Il est bien plus pratique de créer un fichier csv contenant les qcm, les sujets, les questions et les réponses et de l'insérer automatiquement dans l'application.
Vous trouverez en bas de cette page (après la liste des questions et réponses) les boutons permettant d'uploader ce fichier.
Structure du fichier :
le fichier doit être un fichier CSV(séparateur : point-virgule) sans en-tête de colonnes. Le format des caractères doit être en UTF-8 (sans BOM).
La première colonne de chaque ligne doit contenir "qcm" ou "s" ou "q" ou "r" pour spécifier s'il s'agit d'un QCM, d'un sujet, d'une question ou d'une réponses.
S'il s'agit d'un qcm, il y aura une erreur si le qcm existe déjà.
S'il s'agit d'un sujet, il y aura une erreur si le QCM n'existe pas ou si le sujet existe déjà.
S'il s'agit d'une question, il y aura une erreur s'il le QCM et/ou le sujet n'existe pas ou si le numéro de la question existe déjà.
S'il s'agit d'une réponse, il y aura une erreur si le QCM ou la question n'existe pas ou si la lettre de la réponse existe déjà.
les lignes "qcm" doivent comporter 4 colonnes supplémentaires : Mnémonique du QCM, Le temps maximum autorisé, le pourcentage de bonnes réponses et le titre complet du QCM.
Les lignes "s" doivent comporter 3 colonnes supplémentaires : Mnémonique du QCM, le numéro du sujet et le titre du sujet.
Les lignes "q" doivent comporter 10 colonnes supplémentaires : Mnémonique du QCM, le numéro de la question, le type de question ("Bouton radio" ou "Case à cocher"), le conseil, la note
le sujet (en toutes lettres : Il y aura erreur si on ne le retrouve pas dans la table sujets), l'image (colonne vide si pas),
si c'est un groupe insécable (N si non, O si oui), le numéro du groupe insécable (0 si pas) et enfin l'énoncé de la question.
Les lignes "r" doivent comporter 5 colonnes supplémentaires : Mnémonique du QCM, le numéro de la question, la lettre, si c'est la bonne réponse (O si Oui, N si Non) et le texte de la réponses.<
Au cas où une erreur a été rencontrée, l'insertion du fichier est arrêtée. et les enregistrements déjà effectués restent dans l'état dans la base de données.
Il faut donc retourner dans le menu qcm pour supprimer le qcm à recréer. Ceci aura pour effet de supprimer les sujets, les questions et les réponses déjà insérées dans la base de données.
Ensuite, vous corrigez l'erreur dans le fichier et vous tentez une nouvelle insertion.
Gérer les groupes de candidats :
Permet d'ajouter, de modifier ou de supprimer des groupes de candidats.
Même si le candidat n'appartient pas à un groupe, il est conseillé du lui créer quand même un groupe. Ce groupe n'aura qu'un seul candidat mais cela évitera peut-être quelques bugs dans l'application.
Gérer les candidats :
Permet d'ajouter, modifier ou supprimer des candidats.
Au lieu de créer tous les candidats à la main dans l'application, il est certainement plus pratique de créer un fichier csv contenant tous les candidats puis de l'insérer dans l'application.
Le fichier doit être un fichier CSV(séparateur : point-virgule) sans en-tête de colonnes. Le format des caractères doit être en UTF-8 (sans BOM).
La première colonne de chaque ligne doit contenir g --si'il s'agit d'un (nouveau) groupe-- ou c --s'il s'agit d'un candidat--.
Pour un groupe on aura seulement une deuxième colonne indiquant le nom du nouveau groupe (8 lettres max).
Pour un candidat on aura 3 colonnes supplémentaires avec : Nom du candidat; Prénom du candidat; Nom du groupe auquel il est attaché.
Une erreur sera générée si le groupe existe déjà.
Une erreur sera générée si le groupe du candidat n'existe pas. Par contre si un candidat existe déjà, il n'y aura pas d'erreur. Des homonymes peuvent exister. La seule façon de les distinguer
est le nom de leur groupe.
Gérer les examens :
Permet de créer, modifier ou supprimer des examens.
Vous pouvez choisir de créer un examen pour un seul candidat ou bien pour tout un groupe d'un seul coup.
Si c'est un candidat on vous demandera son nom et le test à passer.
Si c'est un groupe on vous demandera le nom du groupe et le test à passer. L'application créera autant d'enregistrements examen qu'il ya de candidats dans le groupe.
Visualiser les résultats :
Permet d'afficher puis éventuellement d'imprimer les résultats des examens terminés.
Vous pouvez choisir de visualiser les résultats d'un candidat ou de tout un groupe.
Sauvegarde des données :
Cette page permet de créer et de télécharger les fichiers csv correspondant aux qcm, aux candidats et aux scores des tests terminés trouvés dans la base de données.
Les fichiers téléchargés ont la structure permettant éventuellement de les réinsérer dans l'application.
Il n'est pas prévu de sauvegarder les examens.
PROCEDURE CANDIDATS
La 1ère page affichée permet de choisir son nom dans une liste.
Il était prévu à une époque de demander une clé d'identification au candidat. Cette option a, pour l'instant,
été abandonnées car elle engendre un travail d'administration beaucoup plus important. En effet, il faut distribuer à chaque candidat sa clé d'identification (et de façon plus ou moins discrète).
la 2ème page permet de choisir, dans une liste, l'examen qu'il veut passer. Cette liste ne contient que les examens générés pour ce candidat.
La 3ème page est un résumé du choix précédent demandant confirmation au candidat.
A partir de là, les questions apparaissent et le candidat doit répondre à chaque question. Un case à cocher permet au candidat de marquer la question s'il veut pouvoir y revenir plus tard, s'il
a le temps. Il a deux boutons à sa disposition pour aller à la question suivante ou à la précédente.
Une fois qu'il a rempli toutes les questions et qu'il a encore du temps, il peut revenir sur les questions qu'il a marquées. Cinq boutons sont à sa disposition : "Première", "Dernière",
"Précédente" ou "Suivante" ou tout simplement "Terminer".
Lorsque le candidat clique sur Terminer, la page de score s'affiche et il n'a plus qu'à retourner à la page d'accueil.
INSTALLATION
Il est prévu que les fichiers soient répartis dans trois dossiers :
- Librairies
- qcm
- gestionqcm
Vous pouvez répartir ces dossiers comme cela vous convient. D'ailleurs le dossier qcm sera probablement le dossier racine du site web. Vous pouvez même ne faire qu'un seul dossier...
Le dossier Librairies contient deux fichiers : celui qui permet la connexion avec la base de données et celui qui contient les fonctions communes "FctsCommunes.inc".
Le fichier permettant de se connecter
à la base de données "libmysql.inc" est prévu pour MYSQLI. Il implémente une classe nommée sql. Si vous utilisez un autre serveur SQL, alors il vous faudra implémenter les mêmes fonctions adaptées pour ce serveur.
Si vous décidez d'utiliser Mysql, vous pouvez garder ce ficher mais n'oubliez pas de modifier les noms de serveur; base de données, utilisateur et mot de passe pour vous connecter au serveur SQL.
Il vous faudra enduite modifier tous les fichiers de l'application pour adapter les liens de l'application à l'organisation de votre site web.
Dans chaque fichier, les liens ont été mis en évidence afin de vous permettre de les repérer facilement.
LLLLLLLLLL indique le dossier librairies
QQQQQQQQQQ indique le dossier qcm
GGGGGGGGGG indique le dossier gestionqcm
Les fichiers du dossier qcm :
- index.html
- attention.html
- saisinom.php
- saisitest.php
- prepareliste.php
- letest.php
- score.php
Les fichiers du dossier gestionqcm :
- adminadm.php
- admincand.php
- adminexamall.php
- adminexamen.php
- admingrp.php
- administration.php
- adminqcm.php
- adminquestrep.php
- adminrescand.php
- adminresgroupe.php
- adminresultats.php
- adminsujets.php
- analyseCandidats.php
- analyseQuestions.php
- autoriser.php
- Deconnecter.php
- editadm.php
- editcand.php
- editexamcand.php
- editexamgrps.php
- editgrp.php
- editqcm.php
- editquestrep.php
- editsujet.php
- fillingqcm.php
- imprimcand.php
- imprimgroupe.php
- sauvegardes.php
Enfin, il vous faudra créer la base de données et les tables sur votre serveur SQL.
Il faudra aussi créer le premier administrateur à la main dans la base de données avec une autorisation "A" afin qu'il puisse administrer complètement l'application.
N.B. : Le champ MotPass doit contenir le hash md5 du mot de passe de l'administrateur. De nombreuses applications permettent de calculer le hash md5 d'une chaine
de caractères par exemple : HashTab, Dpasha ou la commande md5sum sous linux.
Vous aurez aussi, sûrement, à modifier le logo de votre organisation dans le dossier images.
Il ne reste plus qu'à lancer la page index.html de l'application.
-------------------------------------------------------------------------------------------------------------------
Nota : Les fichiers suivants sont livrés avec l'application pour vous permettre de tester :
Un qcm de questions sur la géographie "geographie.csv"
Un qcm de questions sur l'histoire "histoire.csv"
Un groupe de candidats en géographie "GroupeGEO.csv"
Un groupe de candidats en histoire "GroupeHIS.csv"
Le fichier sql contenant les CREATE TABLE des tables de l'application "TablesQcm.sql"
N.B. : Pour tester l'application à partir du site https://www.pav-fr.eu/ : Nom d'utilisateur : adm ; Mot de passe : password
Retour au début